import urllib.request
import os
from pathlib import Path

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent',
                   'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36')
    response = urllib.request.urlopen(req)
    html = response.read()
    return html

def get_page(url):
    '获取图片页码'
    # 解码
    html = url_open(url).decode('utf-8')
    # 根据页码前后的字符串进行定位，a为前面的字符串，b为后面的
    # 查找字符串，加上偏移位置
    a = html.find('current-comment-page')+23
    # b的起始位置为a
    b = html.find(']', a)
    print(html[a:b])
    return html[a:b]


def find_imgs(page_url):
    '根据页面路径获取图片路径'
    # 定义图片地址列表
    img_addrs = []
    # 打开对应图片页码的网页,并解码
    html = url_open(page_url).decode('utf-8')
    # 根据图片前后的字符串进行定位
    a = html.find('img src=')

    # 当a一直存在时，才去找b
    while a!= -1:
        # 该图片路径为网页路径，所以最大不超过255的字符
        b = html.find('.jpg',a,a+255)
        #当 b 找到时将获取的图片地址放入列表中
        if b != -1:
            img_addrs.append(html[a+9:b+4])
        else:
            # b 没有找到，将b的位置放到 'img src=' 后面，不然a和b一直在原地
            b=a+9

        # 找下一个图片的位置，从上一个图片的结束位置b开始找
        a= html.find('img src=',b)

    print(img_addrs)
    # 返回图片路径列表
    return img_addrs


def save_imgs(folder, img_addrs):
    '根据图片路径将图片保存到指定文件夹'
    # 遍历图片列表中的地址
    for addr in img_addrs:
        # 将地址用 / 分割，获取最后一段作为图片名称
        fileName = addr.split('/')[-1]
        with open(fileName,'ab') as f:
            # 打开图片地址，图片为二进制不需要解码
            img=url_open(addr)
            # 保存
            f.write(img)


def download_img(folder='煎蛋图', pages=10):
    # 判断文件夹是否存在
    if not Path(folder).is_dir():
        # 创建文件夹
        os.mkdir(folder)

    # 改变目录
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    # 获取图片页码
    page_num = int(get_page(url))

    #遍历想要获取自定义页数的图片
    for i in range(pages):
        # 页面路径在不停的变，即页数在变
        page_num -= i
        # http://jandan.net/ooxx/page-42#comments
        page_url = url + 'page-' + str(page_num) + '#comments'
        # 根据页面路径获取图片路径
        img_addrs = find_imgs(page_url)
        # 根据图片路径将图片保存到指定文件夹
        save_imgs(folder, img_addrs)


# 只有当前程序为主程序才执行该方法
if __name__ == '__main__':
    download_img()
